package constructor;

/**
 * @Author Stringzhua
 * @Date 2024/2/29 12:54
 * description:构造方法|构造器使用细节
 * 细节1:一个类可以定义多个不同的构造器,即构造器重载
 * 例如:可以再给person类定义一个构造器,用来创建对象的时候,只指定人名,不用指定年龄
 * 细节7(非常重要):一旦定义了自己的构造器,默认的构造器就覆盖了,就不能使用默认的无参构造器,除非显式的定义一下(声明一下)
 * Dog(){
 *
 * }
 */
public class ConstructorDetail {
    public static void main(String[] args) {
        Person01 person01 = new Person01("king",40);//此处使用第一个构造器
        Person01 person02 = new Person01("king");//此处使用第二个构造器
//        p1.Person();//此处调用的用法错误
//        Dog dog1 = new Dog();

    }
}
class Dog{
     /* 细节6:如果程序员没有定义构造器，系统会自动给类生成一个默认无参构造方法(也叫默认构造方法)
     * 默认构造器
     * Dog(){
     *
     * }
     * 比如Dog(){} 使用javap指令 反编译看看
     */
    /*
    * 细节7(非常重要):一旦定义了自己的构造器,默认的构造器就覆盖了,就不能使用默认的无参构造器,除非显式的定义一下(声明一下)
    * Dog(){
    *
    * }
    * */
    public Dog(String dName){
        //...
    }
    Dog(){//显式的定义一下无参构造器
        //
    }
}
class Person01{
    String name;
    int age;
    //第一个构造器
    public Person01(String pName,int pAge){
        name=pName;
        age=pAge;
    }
    //第二个构造器,只指定人名,不用指定年龄
    //public Person0(String pName){ //细节2：构造器名和类名要相同
    public Person01(String pName){
        name=pName;
        //细节3:构造器没有返回值
        //细节4:构造器是完成对象的初始化,并不是创建对象
        //细节5:在创建对象时，系统自动的调用该类的构造方法
    }
}